﻿#pragma once

#include "ais_point.h"
#include "ais_pole.h"

namespace CAGD
{

/**
 * 交互点光源.
 */
class AIS_PointLight : public AIS_Point
{
  public:
    /**
     * @brief 基本构造.
     * @param light
     * @see
     */
    AIS_PointLight(Light light);

    /**
     * @brief 刷新信息.
     * @return
     * @see
     */
    void UpdateInfo() override;

    /**
     * @brief 获得类型.
     * @return
     * @see
     */
    AIS_Type GetType() const override;
};

/**
 * 交互方向光源.
 */
class AIS_DirLight : public AIS_Point
{
  public:
    /**
     * @brief 基本构造.
     * @param light
     * @see
     */
    AIS_DirLight(Light light);

    /**
     * @brief 刷新信息.
     * @return
     * @see
     */
    void UpdateInfo() override;

    /**
     * @brief 获得类型.
     * @return
     * @see
     */
    AIS_Type GetType() const override;

    /**
     * @brief 接收消息.
     * @param mess
     * @see
     */
    void RecvMessage(Message mess) override;
};

/**
 * 交互聚光源.
 */
class AIS_SpotLight : public AIS_Point
{
  public:
    /**
     * @brief 基本构造.
     * @param light
     * @see
     */
    AIS_SpotLight(Light light);

    /**
     * @brief 刷新信息.
     * @return
     * @see
     */
    void UpdateInfo() override;

    /**
     * @brief 获得类型.
     * @return
     * @see
     */
    AIS_Type GetType() const override;

    /**
     * @brief 接收消息.
     * @param mess
     * @see
     */
    void RecvMessage(Message mess) override;
};

} // namespace CAGD
